#ifndef __APP_BUFFER_H__
#define __APP_BUFFER_H__

#include <pthread.h>

typedef struct {
    unsigned char *ptr; // 缓冲区指针
    int size;  // 缓冲区大小
    int len;   // 缓冲区已使用大小
} SubBuffer;

typedef struct {
    SubBuffer *sub_buffer[2]; // 子缓冲区
    int read_index;
    int write_index;
    pthread_mutex_t Read_Lock;
    pthread_mutex_t Write_Lock;
} Buffer;

/**
 * @brief 初始化缓冲区
 * @param size 小缓冲区大小
 * @return 缓冲区指针
 */
Buffer *App_Buffer_Init(int size);

/**
 * @brief 获取缓冲区
 * @param buffer 缓冲区指针
 */
void App_Buffer_close(Buffer *buffer);

/**
 * @brief 写入缓冲区
 * @param buffer 缓冲区指针
 * @param data 写入的数据
 * @param len 写入的数据长度
 * @return 0 成功，-1 失败
 */
int App_Buffer_Write(Buffer *buffer, char *data, int len);

/**
 * @brief 读取缓冲区
 * @param buffer 缓冲区指针
 * @param data 读取数据容器
 * @param len 读取数据容器大小
 * @return 读取的数据长度，-1 失败
 */
int App_Buffer_Read(Buffer *buffer, char *data, int len);

#endif
